},
(VkDeviceSize[1]) { 0 });
- vkCmdPushConstants (self->command_buffer,
- gsk_vulkan_pipeline_get_pipeline_layout (self->pipeline),
- VK_SHADER_STAGE_VERTEX_BIT,
- 0,
- sizeof (graphene_matrix_t),
- &self->mvp);
-
for (l = self->render_passes; l; l = l->next)
{
- gsk_vulkan_render_pass_draw (l->data, self, self->pipeline, self->command_buffer);
+ gsk_vulkan_render_pass_draw (l->data, self, &self->mvp, self->pipeline, self->command_buffer);
}
vkCmdEndRenderPass (self->command_buffer);
}
void
-gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
- GskVulkanRender *render,
- GskVulkanPipeline *pipeline,
- VkCommandBuffer command_buffer)
+gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
+ GskVulkanRender *render,
+ const graphene_matrix_t *root_mvp,
+ GskVulkanPipeline *pipeline,
+ VkCommandBuffer command_buffer)
{
GskVulkanRenderOp *op;
+ graphene_matrix_t world, mvp;
+ float float_matrix[16];
guint i;
for (i = 0; i < self->render_ops->len; i++)
0,
NULL);
+ gsk_render_node_get_world_matrix (op->node, &world);
+ graphene_matrix_multiply (&world, root_mvp, &mvp);
+ graphene_matrix_to_float (&mvp, float_matrix);
+
+ vkCmdPushConstants (command_buffer,
+ gsk_vulkan_pipeline_get_pipeline_layout (pipeline),
+ VK_SHADER_STAGE_VERTEX_BIT,
+ 0,
+ sizeof (float_matrix),
+ &float_matrix);
+
vkCmdDraw (command_buffer,
op->vertex_count, 1,
op->vertex_offset, 0);
GskVulkanRender *render);
void gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
GskVulkanRender *render,
+ const graphene_matrix_t*root_mvp,
GskVulkanPipeline *pipeline,
VkCommandBuffer command_buffer);